Support nautical miles in KML.
authorrobertl <robertl>
Thu, 26 Aug 2010 18:57:31 +0000 (18:57 +0000)
committerrobertl <robertl>
Thu, 26 Aug 2010 18:57:31 +0000 (18:57 +0000)
defs.h
kml.c
units.c

diff --git a/defs.h b/defs.h
index 34dde637427656b56c5a078134c256233417b2cf..dab33a81fd29d2111f9ad0058c8243a59c6fa72f 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -65,6 +65,8 @@
 #define METERS_TO_FEET(meetsies) ((meetsies) * 3.2808399)
 
 #define NMILES_TO_METERS(a) ((a) * 1852.0)     /* nautical miles */
+#define METERS_TO_NMILES(a) ((a) / 1852.0)
+
 #define MILES_TO_METERS(a) ((a) * 1609.344)
 #define METERS_TO_MILES(a) ((a) / 1609.344)
 #define FATHOMS_TO_METERS(a) ((a) * 1.8288)
@@ -1018,7 +1020,8 @@ unsigned long get_crc32_s(const void * data);
 typedef enum {
        units_unknown = 0,
        units_statute = 1,
-       units_metric =2
+       units_metric = 2,
+       units_nautical =3
 } fmt_units;
 
 int    fmt_setunits(fmt_units);
diff --git a/kml.c b/kml.c
index 642499aca97be2927a32154e56c166740c4dd1ee..60bffd98ce5f0aadbe606ff951445edd3e279c8b 100644 (file)
--- a/kml.c
+++ b/kml.c
@@ -127,7 +127,7 @@ arglist_t kml_args[] = {
         "Indicate direction of travel in track icons (default = 0)",
         "0", ARGTYPE_BOOL, ARG_NOMINMAX },
        {"units", &opt_units,
-        "Units used when writing comments ('s'tatute or 'm'etric)",
+        "Units used when writing comments ('s'tatute, 'm'etric,' 'n'autical)",
         "s", ARGTYPE_STRING, ARG_NOMINMAX },
        {"labels", &opt_labels,
         "Display labels on track and routepoints  (default = 1)",
@@ -332,6 +332,7 @@ kml_wr_init(const char *fname)
        switch(u) {
                case 's': fmt_setunits(units_statute); break;
                case 'm': fmt_setunits(units_metric); break;
+               case 'n': fmt_setunits(units_nautical); break;
                default: fatal("Units argument '%s' should be 's' for statute units or 'm' for metric.", opt_units); break;
        }
        /*
diff --git a/units.c b/units.c
index d3a85bfeda00319b044f8146cc55fef27026cc68..d4679aba94f32beac7d91d41fc7dcbdf5bfdb00d 100644 (file)
--- a/units.c
+++ b/units.c
@@ -29,6 +29,7 @@ fmt_setunits(fmt_units u)
        switch (u) {
        case units_statute:
        case units_metric:
+       case units_nautical:
                units = u;
                return 0;
        default:
@@ -51,6 +52,10 @@ fmt_distance(const double distance_meters, char **tag)
                        *tag = "mi";
                }
                break;
+       case units_nautical: 
+               d = METERS_TO_NMILES(distance_meters);
+               *tag = "NM";
+               break;
        case units_metric:
                d = distance_meters;
                if (d < 1000) {
@@ -79,6 +84,10 @@ fmt_speed(const double distance_meters_sec, char **tag)
                d = METERS_TO_MILES(distance_meters_sec) * SECONDS_PER_HOUR ;
                *tag = "mph";
                break;
+       case units_nautical:
+               d = METERS_TO_NMILES(distance_meters_sec) * SECONDS_PER_HOUR ;
+               *tag = "knts";
+               break;
        case units_metric:
                d = distance_meters_sec * SECONDS_PER_HOUR;
                *tag = "meters/hour";